package com.sdhs.file.service;

import java.util.List;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.multipart.MultipartFile;

import com.sdhs.common.core.domain.R;
import com.sdhs.file.domain.SysFileEntity;

/**
 * 文件上传接口
 *
 * @author ruoyi
 */
public interface ISysFileService {
	
//	public void upload_test(MultipartFile file, String folder, String fileName, String md5);
	
//	public void download_test(String id, HttpServletResponse response);
	
	/**
     * 获取文件下载URL
     * @param fileName
     * @return
     */
//    public String generatePresignedUrl(String id, Integer expirationInSeconds);
	
    /**
     * 文件上传接口
     *
     * @param file 上传的文件
     * @return 访问地址
     * @throws Exception
     */
    SysFileEntity uploadFile(MultipartFile file, String folder, String fileName, String md5) throws Exception;

    /**
     * 文件下载
     *
     * @param id       文件id
     * @param response
     * @return
     * @author fangqisong
     */
    void download(Long id, HttpServletResponse response);


    /**
     * 根据文件ossId下载附件压缩包
     * @param ossIdList 文件id集合
     * @param response
     */
    void downloadByFileIds(List<Long> ossIdList, HttpServletResponse response);


    /**
     * 根据url远程上传文件
     *
     * @param fileUrl
     * @param folder
     * @param fileName
     * @return
     * @author yzz
     * @date 2020/10/13 16:34
     */
    SysFileEntity uploadFileByUrl(String fileUrl, String folder, String fileName);

    /**
     * 文件分享。最长7天
     *
     * @param id
     * @param expiry 60 * 60 * 24
     * @return
     * @author yzz
     * @date 2020/9/30 11:30
     */
//    String shareFile(String id, Integer expiry);

    /**
     * 创建文件夹
     *
     * @param bucketName
     */
    void makeBucket(String bucketName);

    /**
     * 拷贝指定文件到指定目录
     *
     * @param bucketName
     * @param objectName
     * @param destBucketName
     * @param destObjectName
     */
    void copyObject(String bucketName, String objectName, String destBucketName, String destObjectName);

    /**
     * 拷贝指定文件到指定目录
     *
     * @param bucketName
     * @param objectName
     * @param destBucketName
     * @param destObjectName
     */
    String copyObjectNew(String bucketName, String objectName, String destBucketName, String destObjectName);

    /**
     * 根据md5获取文件信息
     *
     * @param md5
     * @param fileName
     * @return
     */
    R getFileByMd5(String md5, String fileName);

    /**
     * 查询
     *
     * @param id 主键
     * @return
     */
    SysFileEntity selectSysFileById(Long id);

    /**
     * 查询列表
     *
     * @param sysFile
     * @return 集合
     */
    List<SysFileEntity> selectSysFileList(SysFileEntity sysFile);

    /**
     * 新增
     *
     * @param sysFile
     * @return 结果
     */
    int insertSysFile(SysFileEntity sysFile);

    /**
     * 修改
     *
     * @param sysFile
     * @return 结果
     */
    int updateSysFile(SysFileEntity sysFile);

    /**
     * 批量删除
     *
     * @param ids 需要删除的主键集合
     * @return 结果
     */
    int deleteSysFileByIds(String[] ids);

    /**
     * 删除信息
     *
     * @param id 主键
     * @return 结果
     */
    int deleteSysFileById(String id);


    /**
     * 上传本地附件
     * @return 访问地址
     * @throws Exception
     */
    SysFileEntity uploadLocalFile(String filePath, String folder, String fileName, String md5, Long size) throws Exception;

}
